# 导入机器学习相关库
from sklearn.model_selection import train_test_split     # 数据集划分工具
from sklearn.ensemble import RandomForestClassifier     # 随机森林分类器
from sklearn.metrics import accuracy_score, classification_report  # 评估指标
from sklearn.datasets import make_classification        # 生成模拟数据集
import pandas as pd  # 数据处理库
import numpy as np   # 数值计算库

def build_classification_model():
    """构建分类模型示例 - 展示完整的机器学习流程"""
    # 生成模拟数据集用于分类任务
    # n_samples: 样本数量, n_features: 特征数量, n_classes: 分类类别数
    X, y = make_classification(n_samples=1000, n_features=4, n_classes=2, random_state=42)
    feature_names = ['feature1', 'feature2', 'feature3', 'feature4']  # 特征名称

    # 转换为DataFrame便于查看和处理
    df = pd.DataFrame(X, columns=feature_names)
    df['target'] = y  # 添加目标变量列

    print("=== 数据集信息 ===")
    print(df.head())  # 显示前5行数据
    print(f"\n数据集形状: {df.shape}")  # 显示数据集维度 (样本数, 特征数)
    print(f"目标变量分布:\n{df['target'].value_counts()}")  # 统计各类别样本数量

    # 划分训练集和测试集 (80%训练, 20%测试)
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

    # 训练随机森林模型
    # n_estimators: 决策树数量, random_state: 随机种子确保结果可重现
    model = RandomForestClassifier(n_estimators=100, random_state=42)
    model.fit(X_train, y_train)  # 使用训练数据拟合模型

    # 使用测试集进行预测
    predictions = model.predict(X_test)
    # 计算模型准确率
    accuracy = accuracy_score(y_test, predictions)

    print(f"\n=== 模型评估 ===")
    print(f"准确率: {accuracy:.4f}")  # 显示模型预测准确率
    print("\n详细分类报告:")  # 包含精确率、召回率、F1分数等详细指标
    print(classification_report(y_test, predictions))

    # 分析特征重要性 - 了解哪些特征对预测最重要
    feature_importance = pd.DataFrame({
        'feature': feature_names,
        'importance': model.feature_importances_  # 获取特征重要性分数
    }).sort_values('importance', ascending=False)  # 按重要性降序排列

    print("\n=== 特征重要性 ===")
    print(feature_importance)  # 打印特征重要性排序

# 程序入口点
if __name__ == "__main__":
    build_classification_model()
